﻿using System;
using System.Data;
using System.Web.UI.WebControls;
using TIS.DAO;

namespace TIS.Administrator
{
    public partial class ManagerStaff : System.Web.UI.Page
    {
        private UserDAO _userDao = new UserDAO();
        UserInfo userInfo = new UserInfo();

        protected string VUserName
        {
            get
            {
                return ViewState["vUserName"].ToString();
            }
            set
            {
                ViewState["vUserName"] = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["User"] != null)
                {
                    userInfo = (UserInfo)Session["User"];

                    if (userInfo.Role == 2)
                    {
                        Response.Write("<script> alert('Bạn không có quyền truy cập vào đây'); </script>");
                        Response.Redirect("Home.aspx");
                        return;
                    }
                }
                else
                {
                    Response.Redirect("login.aspx");
                    return;
                }
                BindRole();
                VUserName = "";
                BindData();
                txtUserName.Enabled = true;
                txtPassword.Enabled = true;
                mvDetail.SetActiveView(vDetail);
            }
        }

        protected void grvUser_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {

        }
        private void BindData()
        {
            userInfo = (UserInfo) Session["user"];
            DataTable dtb = null;
            try
            {
                dtb = _userDao.SelectAll(userInfo.UserId);
                if (dtb != null)
                {
                    DataView dv = dtb.DefaultView;
                    string strFilter = "";
                    if (txtUser.Text.Trim() != "") strFilter += "UserName LIKE '%" + txtUser.Text.Trim() + "%'";

                    dv.RowFilter = strFilter;
                    dv.Sort = "DateCreate DESC";

                    grvUser.DataSource = dv;
                    grvUser.DataBind();
                }
                else
                {
                    lblError.Text = "";
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.ToString();
            }
        }

        private void EditUser()
        {
            if (VUserName != "")
            {
                UserInfo objUser = _userDao.Select(VUserName);
                if (objUser != null)
                {
                    txtUserName.Text = objUser.Username.Trim();
                    txtFullName.Text = objUser.FullName.Trim();
                    txtEmail.Text = objUser.Email.Trim();
                    txtMobile.Text = objUser.Phone.Trim();
                    txtAddress.Text = objUser.Address.Trim();
                    ddlChucVu.SelectedValue = Convert.ToString(objUser.Role);
                    //txtTitle.Text = objUser.Title.Trim();
                    //lblLastLogin.Text = objUser.LastLogin.ToShortDateString();
                    //lblCreatedBy.Text = objUser.CreateBy.Trim();
                    lblDateCreate.Text = objUser.DateCreate.ToShortDateString();
                }

                txtUserName.Enabled = false;
                txtPassword.Enabled = false;
            }
        }

        private void DeleteUser()
        {
            userInfo =(UserInfo) Session["user"];

            if (VUserName != "")
            {
                if (VUserName != userInfo.Username)
                {
                    if (_userDao.Delete(VUserName))
                    {
                        lblError.Text = "Đã xóa người dùng";
                        BindData();
                        ClearData();
                    }
                    else
                        lblError.Text = "Có lỗi xảy ra. Liên hệ với quản trị.";
                }
                else
                {
                    lblError.Text = "Không thể xóa tài khoản hiện tại.";
                }
            }
        }

        private void ResetPass()
        {
            if (VUserName != "")
            {
                txtUserNameCP.Text = VUserName;
            }
        }

        private void BindPermission()
        {
            //txtUserNamePM.Text = vUserName;
            //DataTable dtb = UserRoleManager.SelectAllRole(vUserName);
            //if (dtb != null)
            //{
            //    grvPermision.DataSource = dtb;
            //    grvPermision.DataBind();
            //}


            //foreach (GridViewRow row in grvPermision.Rows)
            //{
            //    // Access the CheckBox 
            //    CheckBox cb = (CheckBox)row.FindControl("chkPermit");
            //    if (cb != null)
            //        cb.Enabled = false;
            //}
        }


        protected void grvUser_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                VUserName = e.CommandArgument.ToString();
                switch (e.CommandName)
                {
                    case "Edit":
                        mvDetail.SetActiveView(vDetail);
                        pnPass.Visible = false;
                        NewData();
                        EditUser();
                        break;
                    case "Delete":
                        DeleteUser();
                        break;
                    case "Reset":
                        mvDetail.SetActiveView(vResetPass);
                        ResetPass();
                        break;
                    case "Permission":
                        mvDetail.SetActiveView(vPermission);
                        BindPermission();
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
                throw ex;
            }
        }
        private bool CheckValid()
        {
            if (txtUserName.Text.Trim() == "")
            {
                lblError.Text = "Hãy nhập tên đăng nhập";
                return false;
            }

            return true;
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!CheckValid())
                return;

            if (VUserName != "")
            {
                UserInfo objUser = _userDao.Select(VUserName);
                if (objUser != null)
                {
                    objUser.Email = txtEmail.Text.Trim();
                    objUser.Phone = txtMobile.Text.Trim();
                    objUser.FullName = txtFullName.Text.Trim();
                    objUser.Address = txtAddress.Text.Trim();
                    objUser.Role = int.Parse(ddlChucVu.SelectedValue);
                    if (_userDao.Update(objUser))
                    {
                        lblError.Text = "Đã cập nhật";
                        BindData();
                        ClearData();
                    }
                    else
                        lblError.Text = "Xảy ra lỗi trong quá trình cập nhật. Liên hệ với quản trị";
                }
            }
            else
            {
                if (_userDao.SelectByUserName(txtUserName.Text.Trim()) == null)
                {
                    if (ddlChucVu.SelectedValue == "-1")
                    {
                        lblError.Text = "Chưa chọn quyền cho người dùng";
                    }
                    else
                    {


                        UserInfo objUser = new UserInfo();

                        objUser.Username = txtUserName.Text.Trim();
                        objUser.Password = txtPassword.Text.Trim();
                        objUser.FullName = txtFullName.Text.Trim();
                        objUser.Email = txtEmail.Text.Trim();
                        objUser.Phone = txtMobile.Text.Trim();
                        objUser.Address = txtAddress.Text.Trim();
                        objUser.DateCreate = DateTime.Now;
                        objUser.Role = int.Parse(ddlChucVu.SelectedValue);

                        if (_userDao.Insert(objUser))
                        {
                            lblError.Text = "Đã thêm mới";
                            BindData();
                            ClearData();
                        }
                        else
                            lblError.Text = "Có lỗi trong quá trình thêm mới.Liên hệ với quản trị";
                    }
                }
                else
                {
                    lblError.Text = "Tên đăng nhập đã tồn tại, hãy chọn tên khác";
                }
            }
        }
        protected void grvUser_RowEditing(object sender, GridViewEditEventArgs e)
        {

        }

        protected void btnSearch_Click(object sender, EventArgs e)
        {
            BindData();
        }
        protected void ddlGroup_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindData();
        }
        protected void grvUser_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grvUser.PageIndex = e.NewPageIndex;
            BindData();
        }


        protected void btnNew_Click(object sender, EventArgs e)
        {
            NewData();
            mvDetail.SetActiveView(vDetail);
            ClearData();
        }



        private void NewData()
        {
            pnDetail.Enabled = true;
        }

        private void ClearData()
        {
            VUserName = "";
            txtUserNameCP.Text = "";
            txtPasswordCP.Text = "";
            txtUserName.Text = "";
            txtPassword.Text = "";
            txtEmail.Text = "";
            txtMobile.Text = "";
            txtAddress.Text = "";

            lblDateCreate.Text = "";

            pnPass.Visible = true;
            txtUserName.Enabled = true;
            txtPassword.Enabled = true;
        }

        private void SetPermission()
        {
            //End check Create Permission
            if (VUserName != "")
            {
                // Update UserGroup Permission
                foreach (GridViewRow row in grvPermision.Rows)
                {
                    // Access the CheckBox 
                    CheckBox cb = (CheckBox)row.FindControl("chkPermit");
                    if (cb != null)
                    {
                        // Update permission
                        //_userDao.Update(vUserName, Convert.ToInt32(grvPermision.DataKeys[row.RowIndex].Value), cb.Checked);
                    }
                }

                lblError.Text = "Đã thiết đặt quyền cho " + VUserName;
            }
        }

        public void BindRole()
        {
            DataTable dtRole = new DataTable();

            DataColumn cell = new DataColumn();
            cell.ColumnName = "RoleName";
            cell.DataType = Type.GetType("System.String");
            dtRole.Columns.Add(cell);

            cell = new DataColumn();
            cell.ColumnName = "Value";
            cell.DataType = Type.GetType("System.Int32");
            dtRole.Columns.Add(cell);

            DataRow row = dtRole.NewRow();
            row["RoleName"] = "Mời chọn quyền";
            row["Value"] = "-1";
            dtRole.Rows.Add(row);

            row = dtRole.NewRow();
            row["RoleName"] = "Quản lý";
            row["Value"] = "1";
            dtRole.Rows.Add(row);

            row = dtRole.NewRow();
            row["RoleName"] = "Nhân viên";
            row["Value"] = "2";
            dtRole.Rows.Add(row);

            ddlChucVu.DataSource = dtRole;
            ddlChucVu.DataTextField = "RoleName";
            ddlChucVu.DataValueField = "Value";
            ddlChucVu.DataBind();

        }

        protected void btnReset_Click(object sender, EventArgs e)
        {
            if (_userDao.ResetPass(VUserName, txtPasswordCP.Text.Trim()))
                lblError.Text = "Đã đặt lại mật khẩu";
            else
                lblError.Text = "Thiết lập mật khẩu thất bại. Liên hệ với quản trị.";
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            mvDetail.SetActiveView(vDetail);
        }
        protected void btnSavePM_Click(object sender, EventArgs e)
        {
            SetPermission();
        }
    }
}